const oldMethods = Array.prototype
export const arrayMethods = Object.create(oldMethods)

const methods = [
    'push',
    'pop',
    'reverse',
    'shift',
    'unshift',
    'splice',
    'sort'
]

methods.forEach(method => {
    arrayMethods[method] = function (...args) {
        const ob = this._ob_;
        const res = oldMethods[method].apply(this, args)
        let insert;
        // push unshift splice 可能插入一个新对象，要单独判断
        switch (method) {
            case 'push':
            case 'unshift':
                insert = args;
                break;

            case 'splice':
                insert = args.slice(2);
            default:
                break;
        }
        // 通过 调用 ob.observeArray 将数据转为响应式
        if (insert) ob.observeArray(insert)

        // 通知页面更新
        ob.dep.notify()

        // ob.walk(args)  有些数据本来就已经响应化过，这步操作可能会影响性能
        return res
    }
})